#include<stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<windows.h>
#define random(x) (rand()%x)

int high,width;		//定义游戏画面 
int bird_x,bird_y;		//定义小鸟位置 
int bar_y,bar_xtop,bar_xdown;	//定义屏障位置
int score;		//定义得分 


void gotoxy(int x,int y)	//光标移动到（x,y）位置 
{
	COORD pos = {x,y};
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut, pos);
} 

void hide()         //隐藏光标
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
	SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);
}


void starup()		//数据初始化 
{
	high=36;
	width=18; 
	bird_x=0;
	bird_y=high/6;
	bar_y=high/2;
	bar_xtop=width/4;
	bar_xdown=width/2;
	score=0;
	hide(); 
}

void show()		//显示画面 
{
	int i,j;
	gotoxy(0,0);
	for(i=0;i<=width;i++)
	{
		for(j=0;j<=high;j++)
		{
			if((i==bird_x)&&(j==bird_y))		//输出小鸟 
				printf("$");
			else if((j==bar_y)&&((i<=bar_xtop)||(i>=bar_xdown)))	//输出屏障 
				printf("*");
			else
				printf(" ");
		}
		printf("\n");
	} 
	printf("得分：%d\n",score);
}

void updateWithoutInput()		//与用户输入无关的更新 
{
	bird_x++;		//小鸟移动 
	if(bar_y>=0)	//屏障移动 
		bar_y--;
	else
	{
		bar_y=high/2;
		bar_xtop=rand()%(width-3);	//随机出口 
		bar_xdown=bar_xtop+4;
	}
	Sleep(150);
	if(bird_y==bar_y)
	{
		if((bird_x>=bar_xtop)&&(bird_x<=bar_xdown))
			score++;
		else
		{
			printf("Game over!\n");
			exit(0);
		}
	} 

}

void updateWithInput()		//与用户输入有关的更新 
{
	char input;
	if(kbhit()) 		//当按键时执行 
	{
		input=getch();
		if(input==' ')
		{
			bird_x=bird_x-2;
		} 
	}
}

int main()
{
	starup();
	while(1)
	{
		show();
		updateWithoutInput();
		updateWithInput();
	}
	return 0;
}